package algorithm.Stringhandle;

//一个字符串里面aAd123sdacD12dad2，然后遇到数字取第一个，后面的数字用来分隔，要求结果是这样
//【aAd1，sdacD1，dad2】
//首先想到String自带的截取字符串函数
//根据条件，把数组下角标移动到要截取的字符串的初始位置
//这里用到String的构造函数，可以直接把数组元素截取，然后赋值给字符串
//算法思路，循环读取数组的元素，然后判断：判断是否为数字：如果为true，再次进行判断是截取字符：如果为true进行截取
//并且，将是否截取条件置为false
//如果不是数字，判断是否为不截取，如果为不截取，移动下角标置当前元素，并且将是否截取标志，置为true

import java.util.ArrayList;

public class SplitStringByNumber {
    public static ArrayList<String> cutbynumber(String str){
        ArrayList<String> finalstr = new ArrayList<String>();
        int offset=0;
        boolean mark = false;
        char[] srcchar = str.toCharArray();
        int length = srcchar.length;
        for(int i=0;i<length;i++){
            if (48 <= srcchar[i] && srcchar[i] <= 57) {
                if(mark){
                    finalstr.add( new String(srcchar, offset, i - offset + 1));
                    //下面这句之前没有加，有问题
                    mark = false;
                }
            }
            else {
                if(!mark){
                    offset = i;
                    mark = true;
                }
            }
        }
        // 如果要求最后一个字符无条件结束，则保留
        // 如果一定要求最后一个字符串的最后一个字符是数字，则删除
        if (mark) {
            finalstr.add(new String(srcchar, offset, length - offset));
        }
    return finalstr;
    }
    public static void main(String[] args) {
        ArrayList<String> laststr =  SplitStringByNumber.cutbynumber("aAd123sdacD12dad2ddd");
        for (int i = 0; i < laststr.size(); i++) {
            System.out.println(laststr.get(i));
        }
    }
}
